unit MainUnit;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  EditBtn, ExtCtrls, ComCtrls, CheckLst;

type

  { TGui4UpxMain }

  TGui4UpxMain = class(TForm)
    Button1: TButton;
    CheckListBox1: TCheckListBox;
    FileNameEdit1: TFileNameEdit;
    Label1: TLabel;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    TabSheet4: TTabSheet;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Gui4UpxMain: TGui4UpxMain;

implementation
   uses process;
{$R *.lfm}

{ TGui4UpxMain }

procedure TGui4UpxMain.Button1Click(Sender: TObject);
var
  AProcess: TProcess;
  AStringList: TStringList;

// Начинаем нашу программу
begin
  // Создаем объект TProcess
  AProcess := TProcess.Create(nil);

  // Создаем объект TStringList
  AStringList := TStringList.Create;

  // Зададим командную строку
  // для поиска полного пути можно использовать FindDefaultExecutablePath
  AProcess.CommandLine := 'ppc386 -h';

  // Установим опции программы. Первая из них не позволит нашей программе
  // выполнятся до тех пор, пока не закончит выполнение запущенная программа
  // Также добавим опцию, которая говорит, что мы хотим прочитать
  // вывод запущенной программы
  AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes];

  // Теперь запускаем программу
  AProcess.Execute;

  // Пока запущенная программа не закончится, досюда мы не дойдем

  // А теперь прочитаем вывод в список строк TStringList.
  AStringList.LoadFromStream(AProcess.Output);

  // Сохраним вывод в файл
  AStringList.SaveToFile('output.txt');

  // После сохранения файла мы можем уничтожить
  // TStringList и TProcess.
  (*
  Для разных платформ:
  {$IFDEF WIN32}
   AProcess.CommandLine := 'calc.exe'; //Windows калькулятор
   {$ENDIF}
   {$IFDEF LINUX}
   AProcess.CommandLine := 'kcalc'; //KDE калькулятор
   {$ENDIF}
  *)

  AStringList.Free;
  AProcess.Free;

end;

end.

